home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / include / scribus-ng / styles / charstyle.h next >
Encoding:
C/C++ Source or Header  |  2009-03-14  |  7.5 KB  |  231 lines

  1. /*
  2.  For general Scribus (>=1.3.2) copyright and licensing information please refer
  3.  to the COPYING file provided with the program. Following this notice may exist
  4.  a copyright and/or license notice that predates the release of Scribus 1.3.2
  5.  for which a new license (GPL+exception) is in place.
  6.  */
  7. /***************************************************************************
  8. *                                                                         *
  9. *   This program is free software; you can redistribute it and/or modify  *
  10. *   it under the terms of the GNU General Public License as published by  *
  11. *   the Free Software Foundation; either version 2 of the License, or     *
  12. *   (at your option) any later version.                                   *
  13. *                                                                         *
  14. ***************************************************************************/
  15.  
  16. #ifndef CHARSTYLE_H
  17. #define CHARSTYLE_H
  18.  
  19.  
  20. #include "style.h"
  21.  
  22. class ResourceCollection;
  23.  
  24. enum StyleFlagValue {
  25.     ScStyle_Default       = 0,
  26.     ScStyle_Superscript   = 1,
  27.     ScStyle_Subscript     = 2,
  28.     ScStyle_Outline       = 4,
  29.     ScStyle_Underline     = 8,
  30.     ScStyle_Strikethrough = 16,
  31.     ScStyle_AllCaps       = 32,
  32.     ScStyle_SmallCaps     = 64,
  33.     ScStyle_HyphenationPossible=128, //Hyphenation possible here (Smart Hyphen)
  34.     ScStyle_Shadowed      = 256,
  35.     ScStyle_UnderlineWords= 512,
  36.     ScStyle_Reserved01    = 1024, //free, not used in the moment
  37.     ScStyle_DropCap       = 2048,
  38.     ScStyle_SuppressSpace = 4096,//internal use in PageItem (Suppresses spaces when in Block alignment)
  39.     ScStyle_SmartHyphenVisible=8192, //Smart Hyphen visible at line end
  40.     ScStyle_StartOfLine   = 16384,
  41.     ScStyle_UserStyles    = 1919, // == 1024 + 512 + 256 + 64 + 32 + 16 + 8 + 4 + 2 + 1
  42.     ScStyle_None          = 65535
  43. };
  44.  
  45. class SCRIBUS_API StyleFlag
  46. {
  47. public:
  48.  
  49.     StyleFlagValue value;
  50.  
  51.     StyleFlag(void) { value = ScStyle_Default; }
  52.     StyleFlag(StyleFlagValue val) { value = val; }
  53.     StyleFlag(int val) { value = static_cast<StyleFlagValue>(val); }
  54.  
  55.     operator StyleFlagValue() const { return value; }
  56.  
  57.     QStringList featureList() const; 
  58.     
  59.     StyleFlag& operator=  (StyleFlagValue val) { value = val; return *this;}
  60.     StyleFlag& operator&= (const StyleFlag& right);
  61.     StyleFlag& operator|= (const StyleFlag& right);
  62.     StyleFlag  operator&  (const StyleFlag& right);
  63.     StyleFlag  operator&  (int right);
  64.     StyleFlag  operator|  (const StyleFlag& right);
  65.     StyleFlag  operator^  (const StyleFlag& right);
  66.     StyleFlag  operator^  (int right);
  67.     StyleFlag  operator~  ();
  68.  
  69.     bool operator== (const StyleFlag& right) const;
  70.     bool operator== (const StyleFlagValue right) const;
  71.     bool operator== (int right) const;
  72.     bool operator!= (const StyleFlag& right) const;
  73.     bool operator!= (const StyleFlagValue right) const;
  74. };
  75.  
  76. class SCRIBUS_API CharStyle : public Style {
  77. public:
  78.  
  79.     static const QString INHERIT;
  80.     static const QString BOLD;
  81.     static const QString ITALIC;
  82.     static const QString UNDERLINE;
  83.     static const QString UNDERLINEWORDS;
  84.     static const QString STRIKETHROUGH;
  85.     static const QString SUPERSCRIPT;
  86.     static const QString SUBSCRIPT;
  87.     static const QString OUTLINE;
  88.     static const QString SHADOWED;
  89.     static const QString ALLCAPS;
  90.     static const QString SMALLCAPS;
  91.  
  92.     CharStyle() : Style() {
  93. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  94.         m_##attr_NAME = attr_DEFAULT; \
  95.         inh_##attr_NAME = true;
  96. #include "charstyle.attrdefs.cxx"
  97. #undef ATTRDEF
  98.         m_isDefaultStyle=false;
  99.     };
  100.     
  101.     CharStyle(const ScFace& font, int size, StyleFlag style = ScStyle_Default) : Style() {
  102. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  103.         m_##attr_NAME = attr_DEFAULT; \
  104.         inh_##attr_NAME = true;
  105. #include "charstyle.attrdefs.cxx"
  106. #undef ATTRDEF
  107.         m_isDefaultStyle=false;
  108.         setFont(font);
  109.         setFontSize(size);
  110.         setEffects(style);
  111.     };
  112.     
  113.     CharStyle(const CharStyle & other);
  114.     
  115.     CharStyle & operator=(const CharStyle & other);
  116.     
  117.     static const Xml_string saxxDefaultElem;
  118.     static void  desaxeRules(const Xml_string& prefixPattern, desaxe::Digester& ruleset, Xml_string elemtag = saxxDefaultElem);
  119.     
  120.     virtual void saxx(SaxHandler& handler, const Xml_string& elemtag) const;
  121.     virtual void saxx(SaxHandler& handler)                     const { saxx(handler, saxxDefaultElem); }
  122.     
  123.  
  124.     void getNamedResources(ResourceCollection& lists) const;
  125.     void replaceNamedResources(ResourceCollection& newNames);
  126.  
  127.     QString displayName() const;
  128.  
  129.     void update(const StyleContext * b);
  130.     
  131.     /** This method may alter any of the attributes depending on the value of 'features'.
  132.         Used for font effects */
  133.     void updateFeatures();
  134.     
  135.     bool equiv(const Style& other) const;    
  136.     
  137.     void applyCharStyle(const CharStyle & other);
  138.     void eraseCharStyle(const CharStyle & other);
  139.     void setStyle(const CharStyle & other);
  140.     void erase() { eraseCharStyle(*this); }
  141.     void eraseDirectFormatting();
  142.     
  143.     QString asString() const;
  144.     
  145.     /** This property will be evaluated at runtime and is not stored. See 'updateFeatures()' */
  146.     const StyleFlag effects() const { validate(); return m_Effects; }
  147.     void setEffects(StyleFlag flags) { m_Effects = flags; }
  148.     
  149.     
  150.     /** getter: validates and returns the attribute's value */
  151.     
  152. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  153.     attr_TYPE attr_GETTER() const { validate(); return m_##attr_NAME; }
  154. #include "charstyle.attrdefs.cxx"
  155. #undef ATTRDEF
  156.     
  157.     /** setter: sets the attribute's value and clears inherited flag */
  158.     
  159. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  160.     void set##attr_NAME(attr_TYPE v) { m_##attr_NAME = v; inh_##attr_NAME = false; }
  161. #include "charstyle.attrdefs.cxx"
  162. #undef ATTRDEF
  163.     
  164.     /** setter: resets the attribute's value and sets inherited flag */
  165.     
  166. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  167.     void reset##attr_NAME() { m_##attr_NAME = attr_DEFAULT; inh_##attr_NAME = true; }
  168. #include "charstyle.attrdefs.cxx"
  169. #undef ATTRDEF
  170.     
  171.     /** isInherited: returns true if the attribute is inherited */
  172. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  173.     bool isInh##attr_NAME() const { return inh_##attr_NAME; }
  174. #include "charstyle.attrdefs.cxx"
  175. #undef ATTRDEF
  176.     
  177.     
  178.     /** isDefined: returns true if the attribute is defined in this style or any parent */
  179. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  180.     bool isDef##attr_NAME() const { \
  181.         if ( !inh_##attr_NAME ) return true; \
  182.         const CharStyle * par = dynamic_cast<const CharStyle*>(parentStyle()); \
  183.         return par && par->isDef##attr_NAME(); \
  184.     }
  185. #include "charstyle.attrdefs.cxx"
  186. #undef ATTRDEF
  187.     
  188.     
  189. private:
  190.  
  191.     void runFeatures(const QStringList& featurelist, const CharStyle* parent);
  192.     
  193.     StyleFlag m_Effects;
  194.     // member declarations:
  195.         
  196. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  197.     attr_TYPE m_##attr_NAME; \
  198.     bool inh_##attr_NAME;
  199. #include "charstyle.attrdefs.cxx"
  200. #undef ATTRDEF
  201. };
  202.  
  203.  
  204. inline CharStyle & CharStyle::operator=(const CharStyle & other)
  205. {
  206.     static_cast<Style&>(*this) = static_cast<const Style&>(other);
  207. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  208.     m_##attr_NAME = other.m_##attr_NAME; \
  209.     inh_##attr_NAME = other.inh_##attr_NAME;
  210. #include "charstyle.attrdefs.cxx"
  211. #undef ATTRDEF
  212.     m_Effects = other.m_Effects;
  213. //    m_context = NULL;
  214.     m_contextversion = -1;
  215.     return *this;
  216. }
  217.  
  218. inline CharStyle::CharStyle(const CharStyle & other) : Style(other) 
  219. {
  220. #define ATTRDEF(attr_TYPE, attr_GETTER, attr_NAME, attr_DEFAULT) \
  221.     m_##attr_NAME = other.m_##attr_NAME; \
  222.     inh_##attr_NAME = other.inh_##attr_NAME;
  223. #include "charstyle.attrdefs.cxx"
  224. #undef ATTRDEF
  225.     m_Effects = other.m_Effects;
  226. //    m_context = NULL;
  227.     m_contextversion = -1;
  228. }
  229.  
  230. #endif
  231.